using System.Collections.Generic;

namespace Mediator.Framework.Runtime.QueryProcessing.Operations
{
    public abstract class Operation
    {
        public abstract ISet<Value> NewValues
        {
            get;
        }
        
        public abstract ISet<Value> UsedValues
        { 
            get;
        }
        
        public abstract IEnumerable<OperationDependency> DepandsOn
        { 
            get;
        }
        
        public QueryPlan InPlan
        {
            get; private set;
        }

        protected Operation(QueryPlan inPlan)
        {
            InPlan = inPlan;
            InPlan.AddOperation(this);
        }
    }
}